package Comprobaciones;

import controlador.ParkingControlador;
import java.sql.SQLException;
import modelo.ParkingModelo;
import modelo.entidades.Parking;
import java.util.ArrayList;
import java.util.List;
import Utilidades.Errores;
import Principal.Main;
import Utilidades.Configuracion;

/**
 *
 * @author ffcotan
 */
public class GestionDinamicaParkings {

    ParkingControlador parkingControlador = Main.getParkingControlador();
    ParkingModelo parkingModelo = Main.getParkingModelo();
    List<Parking> parking = null;
    float maximo = Float.valueOf(Configuracion.getPropiedad("Maximo"));
    float minimo = Float.valueOf(Configuracion.getPropiedad("Minimo"));

    public void comprobarParking(String p) {
        boolean enc = false;
        try {
            parking = parkingModelo.listar();
        } catch (SQLException ex) {
            Errores.mostrarError(ex);
        } catch (Exception ex) {
            Errores.mostrarError(ex);
        }
        for (Parking pa : parking) {
            if (pa.getNombre().equals(p)) {
                if ((pa.getPlazas() * maximo) >= (pa.getPlazasLibres())) {//si plazas libres es menor 10 % buscamos uno libre
                    for (Parking pb : parking) {
                        if (pb.getGrupo().equals(pa.getGrupo()) && (!pb.getNombre().equals(pa.getNombre())) 
                                && ((pb.getPlazas() * minimo) <= (pb.getPlazasLibres())) && !enc) {//si hay otro del mismo grupo con plazas libres>25% no hacemos nada
                            enc = true;
                            Errores.mostrarInformacion("Hay otro parking para estos usuarios con plazas libres= " + pb.getNombre());
                        }
                    }
                    if (!enc) {//si no se ha encontrado uno del mismo grupo con plazas lkibre, vamos a buscar uno variable
                        if (!cambiamos(pa.getNombre(), pa.getGrupo())) {//si no existe uno variable con plazas libres avisamos de ello
                            String noParking = "Lo sentimos no hay parking variable disponible en estos momentos";
                            Errores.mostrarInformacion(noParking);
                        }
                    }
                }
            }
        }
    }

    public boolean cambiamos(String p, String g) {
        boolean cambio = false;
        for (Parking pa : parking) {
            if ((pa.getVariable().equals("true")) && (!pa.getNombre().equals(p)) && !cambio) {//si es variable, distinto del que se ha llenado y aun no cambiado
                String gr = pa.getGrupo();     //cogemos el grupo del parking variable que hemos encontrado
                for (Parking pb : parking) {    //recorremos otra vez los parkings
                    if (pb.getGrupo().equals(gr) //si encontramos uno del mismo grupo que el variable encontrado
                            && (pb.getPlazasLibres() > (pb.getPlazas() * minimo)) //si ese del mismo grupo tiene mas del 25 % plazas libres
                            && (!pb.getNombre().equals(pa.getNombre()))) { //y es distinto del parking variable ya encontrado -->cambiamos
                        fireActualizaParkingGesture(pa.getNombre(), g, String.valueOf(pa.getPlazas()), pa.getVariable(), String.valueOf(pa.getPlazasLibres()));
                        cambio = true;
                    }
                }
            }
        }
        return cambio;
    }

    protected void fireActualizaParkingGesture(String nombre, String grupo, String plazas, String variable, String plazasLibres) {

        List<String> dat = new ArrayList<String>();
        dat.add(nombre);
        dat.add(plazas);
        dat.add(grupo);
        dat.add(variable);
        dat.add(plazasLibres);

        parkingControlador.actualizaEntidadGesture(dat);
    }
}
